/**
 * Copyright(c) 2013 Jade Techonologies Co., Ltd.
 *
 * History:
 *   13-4-23 下午10:26 Created by dwzhang
 */
package com.jade.framework.base.criterion.sql;

import com.jade.framework.base.criterion.Constants;
import com.jade.framework.base.criterion.Criterion;
import com.jade.framework.base.criterion.CriterionInterpreter;
import com.jade.framework.base.criterion.expression.LogicalExpression;

/**
 * 把逻辑操作表达式LogicalExpression转换成SQL语句。
 *
 * @author dwzhang
 * @version 1.0 13-4-23 下午10:26
 */
public class LogicalInterpreter implements CriterionInterpreter<SqlContext, LogicalExpression>
{
    /**
     * 对表达式进行解析，形成可以用于实际查询的上下文。
     *
     * @param context    解析上下文。
     * @param expression 需要解析的表达式。
     */
    public void interprete(SqlContext context, LogicalExpression expression)
    {
        Criterion[] criterions = expression.getValues();
        context.append(Constants.BLANK);
        context.append(Constants.LEFT_PARENTHESIS);
        for (int i = 0; i < criterions.length; i++) {
            if (i > 0) {
                context.append(Constants.BLANK);
                context.append(expression.getOperation());
                context.append(Constants.BLANK);
            }
            SqlUtils.interprete(context, criterions[i]);
        }
        context.append(Constants.RIGHT_PARENTHESIS);
    }
}
